// 给定一个只包括 '('，')'，'{'，'}'，'['，']' 的字符串 s ，判断字符串是否有效。
// 有效字符串需满足：
// 左括号必须用相同类型的右括号闭合。
// 左括号必须以正确的顺序闭合。
// 每个右括号都有一个对应的相同类型的左括号。
// https://leetcode.cn/problems/valid-parentheses/description/
// 示例 1：输入：s = "()" 输出：true

import ArrayStack from './01.基于数组实现栈结构(使用接口)';

function isValid(s: string): boolean {
  const stack = new ArrayStack<string>();

  for (let i = 0; i < s.length; i++) {
    const c = s[i];
    switch (c) {
      case '(':
        stack.push(')');
        break;
      case '[':
        stack.push(']');
        break;
      case '{':
        stack.push('}');
        break;
      default:
        if (c !== stack.pop()) return false;
        break;
    }
  }
  return stack.isEmpty();
}

console.log(isValid('()')); // true
console.log(isValid('()[]{}')); //true
console.log(isValid('(]')); // false
console.log(isValid('([]){}')); //true
